﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using RRTWSEntityDSD.Dominio;
using RRTWSNegocioDSD.Dao;

namespace RRTWSDSD.ServiceEntidad
{
    /// <summary>
    /// Summary description for PagoServices
    /// </summary>
    [WebService(Namespace = "http://rtt.edu.upc.com.pe/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class PagoServices : System.Web.Services.WebService
    {
        private static OperacionEnLineaDAO operacionEnLienaDAO = new OperacionEnLineaDAO();
        public static PagoDAO pagoDAO = new PagoDAO();
        private static EntradaService entradaService = new EntradaService();
        private static RRTWSEntityDSD.CalcularServiceServiceReference.CalcularServiceSoapClient proxy = new RRTWSEntityDSD.CalcularServiceServiceReference.CalcularServiceSoapClient();

        [WebMethod]
        public Pago registrarPago(int operacion, int modo, string entidadBancaria, string numeroTrajeta)
        {
            DateTime fechaActual = DateTime.Now;

            DateTime fechaVencimiento = DateTime.Now;
            Pago pago = new Pago();
            //modo = 1 credito
            //modo = 2 debito
            //modo = 3 efectivo
            pago.idOperacion = operacion;
            pago.fechaRegistro =  String.Format("{0:u}", fechaActual); 
            pago.modo = modo;
            if ((modo == 2) || (modo == 3))
            {
                pago.numeroTarjeta = numeroTrajeta;
                pago.entidadBancaria = entidadBancaria;
                pago.estado = 2;
            }
            else
                if ((modo == 1) && (fechaVencimiento != null))
                {
                    fechaVencimiento = fechaActual.AddDays(1);
                    pago.fechaVencimiento = String.Format("{0:u}", fechaVencimiento);
                    pago.estado = 1;
                }
                else
                {
                    throw new Exception("Modo de pago incorrecto");
                }
            pago = pagoDAO.insert(pago);

            return pago;
        }
        [WebMethod]
        public Pago getPagoPorOperacionEnLinea(int operacion)
        {
            Pago pago = pagoDAO.getPagoPorOperacionEnLinea(operacion);
            return pago;
        }

        [WebMethod]
        public Pago actualizarPagoEnEfectivo(int operacion)
        {
            Pago pago = pagoDAO.getPagoPorOperacionEnLinea(operacion);
            DateTime hoy = DateTime.Now;
            double diferencia = proxy.calcularDiferenciaFechasHoras(pago.fechaRegistro, hoy.ToString());
            if (diferencia <= 25) // si es menor a uno(un dia o 24 horas)  y 1 hora de tolerancia
            {
                pago.estado = 1;
                List<Entrada> lsiatEntradas = entradaService.getListaEntradaPorEvento(operacion);
                foreach (Entrada entrada in lsiatEntradas)
                {
                    entradaService.cambiarEstadoPagado(entrada.identrada);
                }
                pagoDAO.actualizarPagoEnEfectivo(pago);
                return pago;
            }
            else {
                List<Entrada> lsiatEntradas = entradaService.getListaEntradaPorEvento(operacion);
                foreach (Entrada entrada in lsiatEntradas) {
                    entrada.estado = 3;//cambia a deshabilitado
                    entradaService.updateEntrada(entrada);
                }
                throw new Exception("No se puede realizar la compra por no haber pagado dentro del tiempo limite");
            }
        }
    }
}
